home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 7_2009-2012.ISO / data / zips / Function_D2181165152010.psc / Function Drawer / Class Modules / GdiPlusPicture.cls < prev   
Text File  |  2010-05-14  |  11KB  |  262 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "GDIPlusPicture"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Private Type GUID
  17.    Data1    As Long
  18.    Data2    As Integer
  19.    Data3    As Integer
  20.    Data4(7) As Byte
  21. End Type
  22.  
  23. Private Type PICTDESC
  24.    Size     As Long
  25.    Type     As Long
  26.    hBmp     As Long
  27.    hPal     As Long
  28.    Reserved As Long
  29. End Type
  30.  
  31. Private Type GdiplusStartupInput
  32.     GdiplusVersion           As Long
  33.     DebugEventCallback       As Long
  34.     SuppressBackgroundThread As Long
  35.     SuppressExternalCodecs   As Long
  36. End Type
  37.  
  38. Private Type PWMFRect16
  39.     Left   As Integer
  40.     Top    As Integer
  41.     Right  As Integer
  42.     Bottom As Integer
  43. End Type
  44.  
  45. Private Type wmfPlaceableFileHeader
  46.     Key         As Long
  47.     hMf         As Integer
  48.     BoundingBox As PWMFRect16
  49.     Inch        As Integer
  50.     Reserved    As Long
  51.     CheckSum    As Integer
  52. End Type
  53.  
  54. ' GDI+ functions
  55. Private Declare Function GdipLoadImageFromFile Lib "gdiplus.dll" (ByVal FileName As Long, GpImage As Long) As Long
  56. Private Declare Function GdiplusStartup Lib "gdiplus.dll" (token As Long, gdipInput As GdiplusStartupInput, GdiplusStartupOutput As Long) As Long
  57. Private Declare Function GdipCreateFromHDC Lib "gdiplus.dll" (ByVal hdc As Long, GpGraphics As Long) As Long
  58. Private Declare Function GdipSetInterpolationMode Lib "gdiplus.dll" (ByVal Graphics As Long, ByVal InterMode As Long) As Long
  59. Private Declare Function GdipDeleteGraphics Lib "gdiplus.dll" (ByVal Graphics As Long) As Long
  60. Private Declare Function GdipDisposeImage Lib "gdiplus.dll" (ByVal Image As Long) As Long
  61. Private Declare Function GdipGetImageWidth Lib "gdiplus.dll" (ByVal Image As Long, Width As Long) As Long
  62. Private Declare Function GdipGetImageHeight Lib "gdiplus.dll" (ByVal Image As Long, Height As Long) As Long
  63. Private Declare Function GdipDrawImageRectRectI Lib "gdiplus.dll" (ByVal Graphics As Long, ByVal GpImage As Long, ByVal dstx As Long, ByVal dsty As Long, ByVal dstwidth As Long, ByVal dstheight As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal SrcWidth As Long, ByVal SrcHeight As Long, ByVal srcUnit As Long, ByVal imageAttributes As Long, ByVal callback As Long, ByVal callbackData As Long) As Long
  64. Private Declare Sub GdiplusShutdown Lib "gdiplus.dll" (ByVal token As Long)
  65.  
  66. ' GDI and GDI+ constants
  67. Private Const InterpolationModeHighQualityBicubic = 7
  68. Private Const GDIP_WMF_PLACEABLEKEY = &H9AC6CDD7
  69. Private Const UnitPixel = 2
  70.  
  71.  
  72. Private GdipToken       As Long
  73. Private GdipInitialized As Boolean
  74.  
  75. Private Const GdiplusVersion     As Long = 1
  76. Private Const CP_ACP            As Long = 0
  77.  
  78.  
  79. Private Type ImageCodecInfo
  80.    ClassID As GUID
  81.    FormatID As GUID
  82.    CodecName As Long
  83.    DllName As Long
  84.    FormatDescription As Long
  85.    FilenameExtension As Long
  86.    MimeType As Long
  87.    Flags As Long
  88.    Version As Long
  89.    SigCount As Long
  90.    SigSize As Long
  91.    SigPattern As Long
  92.    SigMask As Long
  93. End Type
  94.  
  95.  
  96. Private Enum SmoothingMode
  97.     SmoothingModeInvalid = -1&
  98.     SmoothingModeDefault = 0&
  99.     SmoothingModeHighSpeed = 1&
  100.     SmoothingModeHighQuality = 2&
  101.     SmoothingModeNone = 3&
  102.     SmoothingModeAntiAlias8x4 = 4&
  103.     SmoothingModeAntiAlias = SmoothingModeAntiAlias8x4
  104. End Enum
  105.  
  106. Private Enum GpStatus
  107.     OK = 0
  108.     GenericError = 1
  109.     InvalidParameter = 2
  110.     OutOfMemory = 3
  111.     ObjectBusy = 4
  112.     InsufficientBuffer = 5
  113.     NotImplemented = 6
  114.     Win32Error = 7
  115.     WrongState = 8
  116.     Aborted = 9
  117.     FileNotFound = 10
  118.     ValueOverflow = 11
  119.     AccessDenied = 12
  120.     UnknownImageFormat = 13
  121.     FontFamilyNotFound = 14
  122.     FontStyleNotFound = 15
  123.     NotTrueTypeFont = 16
  124.     UnsupportedGdiplusVersion = 17
  125.     GdiplusNotInitialized = 18
  126.     PropertyNotFound = 19
  127.     PropertyNotSupported = 20
  128.     ProfileNotFound = 21
  129. End Enum
  130.  
  131. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  132.  
  133. Private Declare Function lStrlenW Lib "kernel32" (ByVal lpString As Long) As Long
  134. Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Any, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
  135.  
  136.  
  137. Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal Image As Long, ByVal FileName As Long, ByRef clsidEncoder As GUID, ByRef encoderParams As Any) As Long
  138.  
  139.  
  140. Private Declare Function GdipGetImageEncodersSize Lib "gdiplus" (ByRef numEncoders As Long, ByRef Size As Long) As Long
  141. Private Declare Function GdipGetImageEncoders Lib "gdiplus" (ByVal numEncoders As Long, ByVal Size As Long, ByRef Encoders As Any) As Long
  142. Private Declare Function GdipSetSmoothingMode Lib "gdiplus" (ByVal Graphics As Long, ByVal SmoothingMode As SmoothingMode) As GpStatus
  143.  
  144. Private Declare Function GdipSaveGraphics Lib "gdiplus" (ByVal Graphics As Long, ByVal State As Long) As GpStatus
  145.  
  146. ' Initialises GDI Plus
  147. Private Function InitGDIPlus(ByVal token As Long) As Long
  148.     Dim gdipInit As GdiplusStartupInput
  149.     gdipInit.GdiplusVersion = 1
  150.     GdiplusStartup token, gdipInit, ByVal 0&
  151.     InitGDIPlus = token
  152. End Function
  153.  
  154. ' Frees GDI Plus
  155. Private Sub FreeGDIPlus(token As Long)
  156.     GdiplusShutdown token
  157. End Sub
  158.  
  159. Public Sub GetImageSize(ByVal PicFile As String, ByVal ImgWidth As Long, ByVal ImageHeight As Long)
  160.     Dim Img As Long, ImgW As Long, ImgH As Long
  161.     GdipLoadImageFromFile StrPtr(PicFile), Img
  162.     GdipGetImageWidth Img, ImgW
  163.     GdipGetImageHeight Img, ImgH
  164.     ImgWidth = ImgW
  165.     ImageHeight = ImgH
  166.     GdipDisposeImage Img
  167. End Sub
  168.  
  169. 'Private Function GetImageSize(ByVal ImageFile As String) As SizeL
  170. '    Dim token As Long
  171. '    Dim Img As Long
  172. '    Dim gps As GdiplusStartupInput
  173. '    gps.GdiplusVersion = 1
  174. '
  175. '    GdiplusStartup token, gps
  176. '
  177. '    GdipLoadImageFromFile StrPtr(ImageFile), Img
  178. '    GdipGetImageWidth Img, GetImageSize.cx
  179. '    GdipGetImageHeight Img, GetImageSize.cy
  180. '    GdipDisposeImage Img
  181. '
  182. '    GdiplusShutdown token
  183. 'End Function
  184.  
  185. ' Resize the picture using GDI plus
  186. Public Function LoadPictureToHDC(strFile As String, hdc As Long, ByVal DestX As Long, ByVal DestY As Long, ByVal DestWidth As Long, ByVal DestHeight As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal SrcWidth As Long, ByVal SrcHeight As Long) As Long
  187.     On Error Resume Next
  188.     Dim Graphics As Long
  189.     Dim Img As Long
  190.     Dim ImgH As Long, ImgW As Long
  191.     
  192.     GdipLoadImageFromFile StrPtr(strFile), Img
  193.     
  194.     GdipGetImageWidth Img, ImgW
  195.     GdipGetImageHeight Img, ImgH
  196.     
  197.     GdipCreateFromHDC hdc, Graphics
  198.     GdipSetInterpolationMode Graphics, InterpolationModeHighQualityBicubic
  199.         
  200.     LoadPictureToHDC = GdipDrawImageRectRectI(Graphics, Img, DestX, DestY, DestWidth * (DestWidth /, ImgHDC hdcd As Long) As Long
  201.  * (e Fuj_fLong
  202.  * (e Fuj_fLong
  203. fLongacd As Lo.dllPongacd As Lo.dllTD As Lo.dllPongaclga" (axterpols, InterEFuj_fLong
  204. fLongacd AscmnitGuj_fLong
  205. fLeutdown token
  206. End Suestown token
  207. ,(cd c Om
  208. 1yA Long) As Long
  209.  * (e Fas Lo.dllPongacd As Lo.dllTD As Lo.dllPongaclce F As LongGeutdown tokSize Longs Lo.dll(fmFile StrPtr(strFile), Img
  210. x,sibukeF As LongGeut&ng)
  211.  
  212. ' GDI andeut&ng)
  213.  
  214. ' GDI andeut&ng)r Longs Lo.dll) ogdeutdown t,r)r Longs Lo.dlleut&ng)W' GDI andeut&ng)gs Lo.dll) ogdeUID, ByRef enongs Long, ByVal FaW enongs Long, B br Longs LciD, ByRefkGeuutdownkyAs Long
  215.  * (eRvdownkyAs Long
  216. Lo.dllPeage Img
  217. En)=ong, B br Longn As Long
  218. 'u)=ong, B bfmcvr Longs LciD, ByRefkGeuutdownkyAs Long
  219.  * (eRvdoon LoadPictureToHDC(strFilOGeuutdoeus Lo(mHDC(strFilOr,a(spo(strFile), Img
  220.  yAs,N-riD, ByRefkGeuutdE, ByRefkGeuutVal  &ng)
  221.  
  222. ' Gp Suestowa" TrFilOr,a(spo(strFile), Img
  223.  yAs,N-riD&ng)W' GDI and,kSum    As I and As 0ge), Img
  224.  yAsle),,ahpo(strFile), ImgtataEe), Img
  225.  yAsle(tokeutd, Img
  226.  yAsle(tokeutd, Img
  227.  yAsGDIPlus = token
  228. End Functionng, B br tr(ImageFile)(s String) As Sizt
  229. End Funndeut&ngcSLt
  230. End Funndeut&nng)keuaW ee)(s SEnd FunndeuaW ee)(s SEndeutuaW ee)(s Sau
  231. EndeELt
  232. Endwpw,S( bdeuaW ee)ID, ByRef entI anE ee)epand,kSu
  233. Ende
  234.  yAsle(tokeutd, ImgyVaeex-C entI anE ee)wnkyAs Long
  235.  * tcatokebanE ee)wnkyAs tptee)kyAPO.ics As LongL
  236.  yAsle(tokeutd, Imgy,(rFilOr,a(spo(strFisle(tocyYNotIntI acp ee)eutuaWstWidth /, ImgH Vaeex-C entI anamee)krVxrAny,TkSum ConsAs I and As 0geeutuaWstW * t1ks I andw Gp Suestowa" I andwrGp Suestowa" I anE ee)wnkyAs tptee)kyAPO.ics As LoAs anE eetpteeanE ees AmFm
  237. riD&ng)Wu"lOr,a(spo(strFisled,k
  238. WrongS(mHDC(strFilOrFisleOeErVxrAny,ndeuaW ee)(s SEnd  Fo,6r
  239. End Enum
  240.  
  241. Pd FunctstrFs LoAs anu*l DestWig)
  242.  
  243. Pd 1aue ConsndmFile StrP "kerney1aue ConsndmFmAPO.ics As LoAs anE eetpteeanE ey1a)
  244.  
  245. Pd eeanE ey1a)vDuney1aue xong,ney1aue Consndm(OrFisleeaW ilOr,a(spo(strFisyspo(strFissle cItrllTD = GdipDrawpo(strFissle cDSDndmFile StrP "tyUBrFissle cDSDndmFi6x( St.ficsFisedll" (ByVal Image As Long,ssle cDSDndmFi6x Lo.dllPongaclgaxidth /,ction Private Declare FunctDvate Declare (e Fuj_fLopWdth /,ctFissleey Declare/,ction Private Declare Full" (ByVau(mHDC(stre/,ction Pria(ByVau(m*E ee)wntrPtr4tpuaWstW * t1kstrForGdipDrawpo(strcyVal Image As Long,ssle cDSDndutrcyskpgU"lOr,a(spo(staageFile As St1auunct1auua,(mHDC(strFisleeageFile As St1auunct6n.U,UID
  246.    FormaIDByVaFisleeageFi ,uua,(mHDC(strFisleeageFile As St1auunct6n.U,UID
  247.  rcYhc FumFmAPO.ics As LoAs anE eeeFi ,uua,(mHDC(st('Fi ,uua,(mHDivaua,= ImgW
  248.  HDC(strFislByVaFisleeageFi ,ubleeageFi ,(wua,(mHDivaua,= ImgaN b,(wua,(mHDivaua,= ImgaN b,(wua,(mHDivaoAs anE eeegdipInitrDuua,(mHDC(strFis2mAosibukunction(y DetrWtrFis" I  geFi vaoAs anE eeegdipInitrDuua,(mHDC(strFis2mAs aiDestY As LoegdipInctioncng edutr'Acu"mHDC(song,ds LongR2pipIniire FunctDiire.dllPongIIIIIIIIIIIHDivaua,= Imga
  249. CgaN b,(wua,(mHDyWImga
  250. CgaN b,(wua(tokeuoo cIDMDInvaup tsInitrDuua,(mHTopH"vau.dllPonW2MDInvR2pipIni
  251.     GdipGetImageWidth Img, ImgW
  252.     Gdiung edutr' LonedlImgW= Im
  253.  rcYhc FumFmAPO.icsbstrcvmCAcImgW= Im
  254. utr' Lops4IPcrcYhc Futn.U,UID
  255.    FoUl De e
  256. ' GDIumFfics As tcsctnoI2
  257. utr' Lops4IPcrHmops4IPcrHmopsn Img
  258.  tokePtnoI2
  259. utr'tr FunctionAePtnoI2r6g
  260.  tokePics As tcsctnoI2
  261. up
  262.  tokePics Ase'tr Funcctn